package com.yupi.yupicturebackend.api.aliyunai.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * 查询生图任务的响应类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class GetImageTaskResponse implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 任务输出信息
     */
    private Output output;

    /**
     * 请求失败的错误码，请求成功时不会返回此参数
     */
    private String code;

    /**
     * 请求失败的详细信息，请求成功时不会返回此参数
     */
    private String message;

    /**
     * 输出信息统计，只对成功的结果计数
     */
    private Usage usage;

    /**
     * 请求唯一标识，可用于请求明细溯源和问题排查
     */
    @JsonProperty("request_id")
    private String requestId;

    /**
     * 任务输出信息内部类
     */
    @Data
    public static class Output implements Serializable {

        private static final long serialVersionUID = 1L;

        /**
         * 任务ID
         */
        @JsonProperty("task_id")
        private String taskId;

        /**
         * 任务状态
         * 枚举值：PENDING、RUNNING、SUCCEEDED、FAILED、CANCELED、UNKNOWN
         */
        @JsonProperty("task_status")
        private String taskStatus;

        /**
         * 任务提交时间
         */
        @JsonProperty("submit_time")
        private String submitTime;

        /**
         * 任务执行时间
         */
        @JsonProperty("scheduled_time")
        private String scheduledTime;

        /**
         * 任务完成时间
         */
        @JsonProperty("end_time")
        private String endTime;

        /**
         * 任务结果列表
         */
        private List<Result> results;
    }

    /**
     * 任务结果内部类
     */
    @Data
    public static class Result implements Serializable {

        private static final long serialVersionUID = 1L;

        /**
         * 原始的输入prompt
         */
        @JsonProperty("orig_prompt")
        private String origPrompt;

        /**
         * 开启prompt智能改写后，实际使用的prompt
         * 当不开启prompt智能改写时，该字段不会返回
         */
        @JsonProperty("actual_prompt")
        private String actualPrompt;

        /**
         * 模型生成图片的URL地址，有效期为24小时
         */
        private String url;

        /**
         * 错误码，部分任务执行失败时会返回该字段
         */
        private String code;

        /**
         * 错误信息，部分任务执行失败时会返回该字段
         */
        private String message;
    }

    /**
     * 输出信息统计内部类
     */
    @Data
    public static class Usage implements Serializable {

        private static final long serialVersionUID = 1L;

        /**
         * 模型生成图片的数量
         */
        @JsonProperty("image_count")
        private Integer imageCount;
    }
}
    